#include <fstream>
#include <iostream>
#include <vector>

#include "geometry.h"

double epsilon;
std::vector<bool> res;
std::vector<point> points;
size_t n;

size_t go(size_t left, size_t right) 
{
   segment s = segment(points[left], points[right]);
   double d_max = 0;
   size_t mid = 0;
   for (size_t i = left + 1; i < right; i++) 
   {
      double d = dist(points[i], s);
      if ((d_max < d) && (d > epsilon)) 
      {
         d_max = d;
         mid = i;
      }
   }
   if (d_max != 0) 
   {
      res[mid] = true;
      size_t size = 1;
      size += go(left, mid);
      size += go(mid, right);
      return size;
   } 
   else 
      return 0;

}

size_t solve() 
{
   res.resize(n, false);
   res[0] = res[n - 1] = true; 
   return go(0, n - 1) + 2;
}


int main() 
{
   std::cin >> n;
   points.resize(n);
   for (size_t i = 0; i < n; i++) 
      std::cin >> points[i].x >> points[i].y;
   std::cin >> epsilon;
   std::cout << solve() << "\n";

   for (size_t i = 0; i < n; i++) 
      if (res[i] == true) 
         std::cout << i + 1 << ((i + 1 != n) ? " " : "\n");
   return 0;
}